{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "dJeZx71wW7kc"
   },
   "source": [
    "<center>\n",
    "    <p style=\"text-align:center\">\n",
    "        <img alt=\"phoenix logo\" src=\"https://storage.googleapis.com/arize-assets/phoenix/assets/phoenix-logo-light.svg\" width=\"200\"/>\n",
    "        <br>\n",
    "        <a href=\"https://arize.com/docs/phoenix/\">Docs</a>\n",
    "        |\n",
    "        <a href=\"https://github.com/Arize-ai/phoenix\">GitHub</a>\n",
    "        |\n",
    "        <a href=\"https://arize-ai.slack.com/join/shared_invite/zt-2w57bhem8-hq24MB6u7yE_ZF_ilOYSBw#/shared-invite/email\">Community</a>\n",
    "    </p>\n",
    "</center>\n",
    "<h1 align=\"center\">User Frustration Evals</h1>\n",
    "\n",
    "Arize provides tooling to evaluate LLM applications, including tools to determine if a user became frustrated during a conversation with an AI assistant.\n",
    "\n",
    "The purpose of this notebook is:\n",
    "\n",
    "- to evaluate the performance of an LLM-assisted user frustration detection\n",
    "- to provide an experimental framework for users to iterate and improve on the default classification template.\n",
    "\n",
    "## Install Dependencies and Import Libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "id": "bo5abN-5W7kf"
   },
   "outputs": [],
   "source": [
    "#####################\n",
    "## N_EVAL_SAMPLE_SIZE\n",
    "#####################\n",
    "# Eval sample size determines the run time\n",
    "# 100 samples: GPT-4 ~ 80 sec / GPT-3.5 ~ 40 sec\n",
    "# 1,000 samples: GPT-4 ~15-17 min / GPT-3.5 ~ 6-7min (depending on retries)\n",
    "# 10,000 samples GPT-4 ~170 min / GPT-3.5 ~ 70min\n",
    "N_EVAL_SAMPLE_SIZE = 100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "0lCBpUmpW7kg",
    "outputId": "cf2d2195-13ee-4128-e439-c4556780cf53"
   },
   "outputs": [],
   "source": [
    "!pip install -qqq \"arize-phoenix\" \"openai>=1\" ipython matplotlib pycm scikit-learn tiktoken openinference-instrumentation-openai 'httpx<0.28'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "id": "K-pQ_E9cW7kg"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/jasonlopatecki/vs_projects/haystack-venv/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
      "  from .autonotebook import tqdm as notebook_tqdm\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "from getpass import getpass\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import openai\n",
    "import pandas as pd\n",
    "from pycm import ConfusionMatrix\n",
    "from sklearn.metrics import classification_report\n",
    "\n",
    "from phoenix.evals import (\n",
    "    USER_FRUSTRATION_PROMPT_RAILS_MAP,\n",
    "    USER_FRUSTRATION_PROMPT_TEMPLATE,\n",
    "    OpenAIModel,\n",
    "    llm_classify,\n",
    ")\n",
    "\n",
    "pd.set_option(\"display.max_colwidth\", None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "OrderedDict([(True, 'frustrated'), (False, 'ok')])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "USER_FRUSTRATION_PROMPT_RAILS_MAP"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "IXpQwB9oRNTw"
   },
   "source": [
    "## Download Benchmark Dataset (need to add this dataset to repo)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 397
    },
    "id": "e1VVyWz0RNuO",
    "outputId": "5b0fcb0d-5701-4c95-a67f-9c3c3c17fa3d"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>conversation</th>\n",
       "      <th>frustrated</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>CUSTOMER: Hi, I seem to be having trouble with my internet service. It's been cutting in and out all morning.\\n\\nASSISTANT: I'm sorry to hear that you're experiencing this issue. Can you tell me more about the problem?\\n\\nCUSTOMER: It keeps disconnecting, despite resetting the modem multiple times. I've been trying to work online and it's becoming increasingly frustrating.\\n\\nASSISTANT: I appreciate your patience. Have you tried performing a speed test on your connection?\\n\\nCUSTOMER: Yes, I have. The results were all over the place, there's clearly instability. Can I speak to a live customer service rep about this?\\n\\nASSISTANT: Of course, let me connect you to our live support team who will be able to assist you further.</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>CUSTOMER: Hi, I am experiencing some issues with the software I recently subscribed to. \\n\\nASSISTANT: I'm sorry to hear that you are having trouble. Can you describe the problem you're facing?\\n\\nCUSTOMER: Well, I am unable to sign in. The system does not recognize my email or password.\\n\\nASSISTANT: That's odd. I'm sure we can figure this out. Can you please confirm your email? \\n\\nCUSTOMER: Look, I don't think you get it. I did not receive the confirmation email you promised at registration. That is the issue!\\n\\nASSISTANT: I apologize for this oversight. I'll ensure the email is sent immediately. Please, check your inbox shortly.</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>CUSTOMER: Hi, I'm having issues with my insurance policy claim.\\n\\nASSISTANT: I'm sorry to hear you're having trouble. Can you elaborate on the issue?\\n\\nCUSTOMER: Well, I submitted my claim two weeks ago and haven't received any updates yet.\\n\\nASSISTANT: I understand your concern. Let me check the status of your claim.\\n\\nCUSTOMER: I have been waiting for a while, can I speak with a live customer service representative instead?\\n\\nASSISTANT: Absolutely, allow me to connect you to a live agent who can assist you further.</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>CUSTOMER: Hi, I'm having problems with your online booking service.\\n\\nASSISTANT: I'm sorry to hear that you are having issues. Can you elaborate on what's happening?\\n\\nCUSTOMER: Well, the system is not letting me sign in to complete a reservation.\\n\\nASSISTANT: I see, have you tried using the 'Forgot Password' option to reset your password?\\n\\nCUSTOMER: I've done that twice now and I'm still unable to sign in.\\n\\nASSISTANT: My apologies for the inconvenience. Would you like me to connect you with a live customer service representative?\\n</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>CUSTOMER: Hi, my new Fitness Band isn't tracking my heart rate correctly. \\n\\nASSISTANT: Can you elaborate on the problem that is occurring with the heart rate tracker? \\n\\nCUSTOMER: Yes, the numbers are fluctuating way too much. It got up to 190 bpm during a light jog.\\n\\nASSISTANT: Have you tried resetting the band? \\n\\nCUSTOMER: Yes, several times actually. Nothing seems to resolve this. Can I please speak directly with someone who can handle this?\\n\\nASSISTANT: Of course, I'm sorry for your inconvenience. Let me connect you with our technical support team.\\n</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   conversation  \\\n",
       "0  CUSTOMER: Hi, I seem to be having trouble with my internet service. It's been cutting in and out all morning.\\n\\nASSISTANT: I'm sorry to hear that you're experiencing this issue. Can you tell me more about the problem?\\n\\nCUSTOMER: It keeps disconnecting, despite resetting the modem multiple times. I've been trying to work online and it's becoming increasingly frustrating.\\n\\nASSISTANT: I appreciate your patience. Have you tried performing a speed test on your connection?\\n\\nCUSTOMER: Yes, I have. The results were all over the place, there's clearly instability. Can I speak to a live customer service rep about this?\\n\\nASSISTANT: Of course, let me connect you to our live support team who will be able to assist you further.   \n",
       "1                                                                                             CUSTOMER: Hi, I am experiencing some issues with the software I recently subscribed to. \\n\\nASSISTANT: I'm sorry to hear that you are having trouble. Can you describe the problem you're facing?\\n\\nCUSTOMER: Well, I am unable to sign in. The system does not recognize my email or password.\\n\\nASSISTANT: That's odd. I'm sure we can figure this out. Can you please confirm your email? \\n\\nCUSTOMER: Look, I don't think you get it. I did not receive the confirmation email you promised at registration. That is the issue!\\n\\nASSISTANT: I apologize for this oversight. I'll ensure the email is sent immediately. Please, check your inbox shortly.   \n",
       "2                                                                                                                                                                                                               CUSTOMER: Hi, I'm having issues with my insurance policy claim.\\n\\nASSISTANT: I'm sorry to hear you're having trouble. Can you elaborate on the issue?\\n\\nCUSTOMER: Well, I submitted my claim two weeks ago and haven't received any updates yet.\\n\\nASSISTANT: I understand your concern. Let me check the status of your claim.\\n\\nCUSTOMER: I have been waiting for a while, can I speak with a live customer service representative instead?\\n\\nASSISTANT: Absolutely, allow me to connect you to a live agent who can assist you further.   \n",
       "3                                                                                                                                                                                             CUSTOMER: Hi, I'm having problems with your online booking service.\\n\\nASSISTANT: I'm sorry to hear that you are having issues. Can you elaborate on what's happening?\\n\\nCUSTOMER: Well, the system is not letting me sign in to complete a reservation.\\n\\nASSISTANT: I see, have you tried using the 'Forgot Password' option to reset your password?\\n\\nCUSTOMER: I've done that twice now and I'm still unable to sign in.\\n\\nASSISTANT: My apologies for the inconvenience. Would you like me to connect you with a live customer service representative?\\n   \n",
       "4                                                                                                                                                                      CUSTOMER: Hi, my new Fitness Band isn't tracking my heart rate correctly. \\n\\nASSISTANT: Can you elaborate on the problem that is occurring with the heart rate tracker? \\n\\nCUSTOMER: Yes, the numbers are fluctuating way too much. It got up to 190 bpm during a light jog.\\n\\nASSISTANT: Have you tried resetting the band? \\n\\nCUSTOMER: Yes, several times actually. Nothing seems to resolve this. Can I please speak directly with someone who can handle this?\\n\\nASSISTANT: Of course, I'm sorry for your inconvenience. Let me connect you with our technical support team.\\n   \n",
       "\n",
       "   frustrated  \n",
       "0        True  \n",
       "1        True  \n",
       "2        True  \n",
       "3        True  \n",
       "4        True  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_parquet(\n",
    "    \"https://storage.googleapis.com/arize-assets/phoenix/evals/user_frustration-classification/example-user-frustration-dataset.parquet\"\n",
    ")\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "CygC8n-XXOr3"
   },
   "source": [
    "## Phoenix UI (link) for Evals Debugging!!\n",
    "Click the link below to see Evals in Phoenix UI. Runs locally on Colab Server and collects OpenAI calls as they are made by the Evals Library."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 71
    },
    "id": "ab44gf2hXM1S",
    "outputId": "a2c967f9-7392-47be-b684-752f85ba9d63"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "🌍 To view the Phoenix app in your browser, visit http://localhost:6006/\n",
      "📺 To view the Phoenix app in a notebook, run `px.active_session().view()`\n",
      "📖 For more information on how to use Phoenix, check out https://arize.com/docs/phoenix\n"
     ]
    }
   ],
   "source": [
    "from openinference.instrumentation.openai import OpenAIInstrumentor\n",
    "\n",
    "import phoenix as px\n",
    "from phoenix.otel import register\n",
    "\n",
    "(session := px.launch_app()).view()\n",
    "tracer_provider = register()\n",
    "OpenAIInstrumentor(tracer_provider=tracer_provider).instrument()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "UCbpF0YaaY3_"
   },
   "source": [
    "![Screenshot 2023-10-15 at 3.16.25 PM.png]()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "ThbviZTrW7ki"
   },
   "source": [
    "## Display User Frustration Classification Template (Need to add below template to repo)\n",
    "\n",
    "View the default template used to classify user frustration. You can tweak this template and evaluate its performance relative to the default.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "xHIYx0FEW7ki",
    "outputId": "f1f7a055-18d1-46ac-9225-db1b4bfeacc0"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "  You are given a conversation where between a user and an assistant.\n",
      "  Here is the conversation:\n",
      "  [BEGIN DATA]\n",
      "  *****************\n",
      "  Conversation:\n",
      "  {conversation}\n",
      "  *****************\n",
      "  [END DATA]\n",
      "\n",
      "  Examine the conversation and determine whether or not the user got frustrated from the experience.\n",
      "  Frustration can range from midly frustrated to extremely frustrated. If the user seemed frustrated\n",
      "  at the beginning of the conversation but seemed satisfied at the end, they should not be deemed\n",
      "  as frustrated. Focus on how the user left the conversation.\n",
      "\n",
      "  Your response must be a single word, either \"frustrated\" or \"ok\", and should not\n",
      "  contain any text or characters aside from that word. \"frustrated\" means the user was left\n",
      "  frustrated as a result of the conversation. \"ok\" means that the user did not get frustrated\n",
      "  from the conversation.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(USER_FRUSTRATION_PROMPT_TEMPLATE)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "TkqPkZuAW7kj"
   },
   "source": [
    "The template variables are:\n",
    "\n",
    "- **conversation:** the chat conversation between a user and an assistant."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "VaJES2g2W7kj"
   },
   "source": [
    "## Configure the LLM\n",
    "\n",
    "Configure your OpenAI API key."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "bXpXaQ4BW7kj",
    "outputId": "3a2c12a2-17da-4d90-9e9a-0de7dc1260e9"
   },
   "outputs": [],
   "source": [
    "if not (openai_api_key := os.getenv(\"OPENAI_API_KEY\")):\n",
    "    openai_api_key = getpass(\"🔑 Enter your OpenAI API key: \")\n",
    "openai.api_key = openai_api_key\n",
    "os.environ[\"OPENAI_API_KEY\"] = openai_api_key"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "FH-pm8_gW7kj"
   },
   "source": [
    "## Benchmark Dataset Sample\n",
    "Sample size determines run time. It's recommended to start with a small sample (e.g., 100 data points) and iterate from there."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "zR4NXdeGW7kk",
    "outputId": "74be4ab6-dd7b-493d-b47d-85be5e42ac3c"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(100, 2)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sample = df.sample(n=N_EVAL_SAMPLE_SIZE).reset_index(drop=True)\n",
    "df_sample.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "zZBUZXK8W7kk"
   },
   "source": [
    "## LLM Evals: User Frustration Classifications GPT-4\n",
    "Run user frustration classifications against a subset of the data.\n",
    "Instantiate the LLM and set parameters."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "i3xNu2J4W7kk",
    "outputId": "a2970668-aa39-4c88-a74a-453225dad198"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The `model_name` field is deprecated. Use `model` instead.                 This will be removed in a future release.\n"
     ]
    }
   ],
   "source": [
    "model = OpenAIModel(\n",
    "    model_name=\"gpt-4\",\n",
    "    temperature=0.0,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 35
    },
    "id": "MbG8V-fhW7kk",
    "outputId": "7fb2fd0b-fc1a-4e3d-c2d6-13cc2de41c35"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "\"Hello! I'm working perfectly. How can I assist you today?\""
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model(\"Hello world, this is a test if you are working?\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "pj4yLqm5W7kk"
   },
   "source": [
    "## Run User Frustration Classifications\n",
    "\n",
    "Run user frustration classifications against a subset of the data.\n",
    "\n",
    "Verbose mode is active below, it will print out RateLimit handeling and rails\n",
    "(railing / cleaning up the text ouptut to fixed values)\n",
    "\n",
    "Rails will take a messy text output like \"frustrated...\" -> \"frustrated\"\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "id": "TAVaQvVJQAbE"
   },
   "outputs": [],
   "source": [
    "import nest_asyncio\n",
    "\n",
    "nest_asyncio.apply()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "OrderedDict([(True, 'frustrated'), (False, 'ok')])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "USER_FRUSTRATION_PROMPT_RAILS_MAP"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000,
     "referenced_widgets": [
      "90aa2c05581b437481faab5c6d0f4ec2",
      "789d884dbb9547b2871a7f4e0b3d4c82",
      "d37a3ba29c264c50a4263407e2b175ff",
      "81b61a82d6ad4b3d852941fe1b62e704",
      "a9b25926eaba49a294f11d5959ff1126",
      "58a5bc20d66c47d393fdbdc7c3fc1c34",
      "821bcdb367604e998d80f0ed92aa4c44",
      "bb24856156f04436b17b3d102d3c2056",
      "72375a9bd56448b38134735ee2507e9a",
      "76b4ee1c0ec342d580a8e0dc8f3bdad2",
      "62db587137984e47825f6d8d18deac9a"
     ]
    },
    "id": "944__QIAW7kl",
    "outputId": "f3d8b8a2-7072-4ea2-ea22-f8aede1f8042"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "llm_classify |          | 0/100 (0.0%) | ⏳ 00:00<? | ?it/s"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "llm_classify |██████████| 100/100 (100.0%) | ⏳ 00:03<00:00 | 28.89it/s\n"
     ]
    }
   ],
   "source": [
    "# The rails is used to hold the output to specific values based on the template\n",
    "# It will remove text such as \",,,\" or \"...\"\n",
    "# Will ensure the binary value expected from the template is returned\n",
    "rails = list(USER_FRUSTRATION_PROMPT_RAILS_MAP.values())\n",
    "\n",
    "frustration_classifications = llm_classify(\n",
    "    dataframe=df_sample,\n",
    "    template=USER_FRUSTRATION_PROMPT_TEMPLATE,\n",
    "    model=model,\n",
    "    rails=rails,\n",
    "    concurrency=20,\n",
    ")[\"label\"].tolist()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "BSaAQlz1W7kl"
   },
   "source": [
    "## Evaluate Classifications\n",
    "\n",
    "Evaluate the predictions against human-labeled ground-truth user frustration labels."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 651
    },
    "id": "jB6y9j4BW7kl",
    "outputId": "3e09f1b0-1268-4121-9894-2a3ed2e859e1"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "  frustrated       1.00      0.80      0.89        49\n",
      "          ok       0.84      1.00      0.91        51\n",
      "\n",
      "    accuracy                           0.90       100\n",
      "   macro avg       0.92      0.90      0.90       100\n",
      "weighted avg       0.92      0.90      0.90       100\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Axes: title={'center': 'Confusion Matrix (Normalized)'}, xlabel='Predicted Classes', ylabel='Actual Classes'>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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a4axY8di3LhxSpdxl0blYab79+/D1dUVALBnzx706tUL8+fPx8WLF9G9e3dVmyMiIiItMmbMmBKHlaKiooqVeXl54c8//6zQPVXumdHX10dOTg4A4NixY+jatSsAoGbNmvIeGyIiIqpaOiKRWg5NoHLPTPv27RESEgJvb2+cO3cOO3fuBFA4Yef1pwITERFR1eCu2aX49ttvUaNGDezevRurVq2S75/w66+/4v3331d7gERERKS66rRrtso9M3Xr1sXBgweLlS9dulQtARERERGpQuWemYsXL+LKlSvy1z///DMCAgIwbdo05OXlqTU4IiIiKp+qWM1UVVROZkaMGIFbt24BKNxT4dNPP4WhoSF27dqFKVOmqD1AIiIiUl11mgCscjJz69YteHh4AAB27dqF9957D9u2bcPGjRuxZ88edcdHREREVCqV58wIggCZTAagcGl2z549ARQ++CYlJUW90REREVG5iP7/qGgbmkDlZKZVq1b46quv4Ofnh1OnTmHVqlUACh+m9/q230RERFQ11LEaSVNWM6k8zBQREYGLFy9izJgxmD59OpycnAAAu3fvRrt27dQeIBEREVFpVO6ZadasmcJqpiILFy5U2MKbiIiIqo6OqPCoaBuaQOVkpiQGBgbqaoqIiIgqqDoNM6mczBQUFGDp0qX46aefEB8fX+zZMk+fPlVbcERERERvovKcmTlz5mDJkiXo168f0tPTERISgj59+kBHRwezZ8+uhBCJiIioPKrDA/OAciQzW7duxdq1azFx4kTUqFED/fv3x7p16xAaGlrhLbyJiIhIParT3kwqJzOJiYlwc3MDABgbGyM9PR0A0LNnTxw6dEi90REREVG5FE0AruihCVROZurUqYPHjx8DABo0aIAjR44AAM6fPw+xWKze6IiIiIjeQOVk5sMPP8Tx48cBAF988QVmzpwJZ2dnDBo0CIMHD1Z7gERERKS66jTMpPJqpgULFsj/3q9fP9StWxfR0dFwdnZGr1691BocERERlQ+3M1CBl5cXvLy81BELERERkcrKlMwcOHCgzA1+8MEH5Q6GiIiI1ENHJIJOBYeJKnr921KmZCYgIKBMjYlEIhQUFFQkHiIiIlIDdTwrRkNymbIlMzKZrLLjICIiIioXte3NRERERO+O6rQ3U5mXZp84cQKurq7IyMgodi49PR1NmjTB6dOn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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "true_labels = df_sample[\"frustrated\"].map(USER_FRUSTRATION_PROMPT_RAILS_MAP).tolist()\n",
    "\n",
    "print(classification_report(true_labels, frustration_classifications, labels=rails))\n",
    "confusion_matrix = ConfusionMatrix(\n",
    "    actual_vector=true_labels, predict_vector=frustration_classifications, classes=rails\n",
    ")\n",
    "confusion_matrix.plot(\n",
    "    cmap=plt.colormaps[\"Blues\"],\n",
    "    number_label=True,\n",
    "    normalized=True,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "WizGtDCbW7kl"
   },
   "source": [
    "## LLM Evals: User Frustration Classifications GPT-3.5\n",
    "Run user frustration classifications against a subset of the data using GPT-3.5."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "id": "Sftw-qP3W7kl"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The `model_name` field is deprecated. Use `model` instead.                 This will be removed in a future release.\n"
     ]
    }
   ],
   "source": [
    "model = OpenAIModel(model_name=\"gpt-3.5-turbo\", temperature=0.0, request_timeout=20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 49,
     "referenced_widgets": [
      "522e8eb0b35847f2bd02c2cc1b5991e7",
      "e9081b98ab0444b28ec184856072a1ef",
      "071b56bd8fb34b368602d29bc1707cdd",
      "547dd6eb2ad14f01a8703116656d4301",
      "be387a3166664a14bf9300a425d833be",
      "b13aa9b245284d8e8d5bc54e7c78de5a",
      "1ff8614880b34909b8a782693d389e2c",
      "741e9f62186445b58e135b3400fd3e57",
      "36ca785ab8b84f3983194627dfebee9e",
      "8c8f5900feaf4d17bf178e465c764060",
      "58345bcb04ce4aed8dc6700160133cbc"
     ]
    },
    "id": "lDPyaPbDW7kl",
    "outputId": "7fac6234-d231-43e3-9172-41c99bee97e3"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "llm_classify |██████████| 100/100 (100.0%) | ⏳ 00:19<00:00 |  5.13it/s\n"
     ]
    }
   ],
   "source": [
    "rails = list(USER_FRUSTRATION_PROMPT_RAILS_MAP.values())\n",
    "\n",
    "frustration_classifications = llm_classify(\n",
    "    dataframe=df_sample,\n",
    "    template=USER_FRUSTRATION_PROMPT_TEMPLATE,\n",
    "    model=model,\n",
    "    rails=rails,\n",
    "    verbose=False,\n",
    ")[\"label\"].tolist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 651
    },
    "id": "Ize44U4EW7km",
    "outputId": "326119b8-9c82-43b6-9be1-a125b180e77b"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "  frustrated       0.98      0.96      0.97        49\n",
      "          ok       0.96      0.98      0.97        51\n",
      "\n",
      "    accuracy                           0.97       100\n",
      "   macro avg       0.97      0.97      0.97       100\n",
      "weighted avg       0.97      0.97      0.97       100\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Axes: title={'center': 'Confusion Matrix (Normalized)'}, xlabel='Predicted Classes', ylabel='Actual Classes'>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "true_labels = df_sample[\"frustrated\"].map(USER_FRUSTRATION_PROMPT_RAILS_MAP).tolist()\n",
    "\n",
    "print(classification_report(true_labels, frustration_classifications, labels=rails))\n",
    "confusion_matrix = ConfusionMatrix(\n",
    "    actual_vector=true_labels, predict_vector=frustration_classifications, classes=rails\n",
    ")\n",
    "confusion_matrix.plot(\n",
    "    cmap=plt.colormaps[\"Blues\"],\n",
    "    number_label=True,\n",
    "    normalized=True,\n",
    ")"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.6"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "071b56bd8fb34b368602d29bc1707cdd": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_741e9f62186445b58e135b3400fd3e57",
      "max": 100,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_36ca785ab8b84f3983194627dfebee9e",
      "value": 100
     }
    },
    "1ff8614880b34909b8a782693d389e2c": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "36ca785ab8b84f3983194627dfebee9e": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "522e8eb0b35847f2bd02c2cc1b5991e7": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_e9081b98ab0444b28ec184856072a1ef",
       "IPY_MODEL_071b56bd8fb34b368602d29bc1707cdd",
       "IPY_MODEL_547dd6eb2ad14f01a8703116656d4301"
      ],
      "layout": "IPY_MODEL_be387a3166664a14bf9300a425d833be"
     }
    },
    "547dd6eb2ad14f01a8703116656d4301": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_8c8f5900feaf4d17bf178e465c764060",
      "placeholder": "​",
      "style": "IPY_MODEL_58345bcb04ce4aed8dc6700160133cbc",
      "value": " 100/100 (100.0%) | ⏳ 01:04&lt;00:00 |  1.72it/s"
     }
    },
    "58345bcb04ce4aed8dc6700160133cbc": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "58a5bc20d66c47d393fdbdc7c3fc1c34": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "62db587137984e47825f6d8d18deac9a": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "72375a9bd56448b38134735ee2507e9a": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "741e9f62186445b58e135b3400fd3e57": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "76b4ee1c0ec342d580a8e0dc8f3bdad2": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "789d884dbb9547b2871a7f4e0b3d4c82": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_58a5bc20d66c47d393fdbdc7c3fc1c34",
      "placeholder": "​",
      "style": "IPY_MODEL_821bcdb367604e998d80f0ed92aa4c44",
      "value": "llm_classify "
     }
    },
    "81b61a82d6ad4b3d852941fe1b62e704": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_76b4ee1c0ec342d580a8e0dc8f3bdad2",
      "placeholder": "​",
      "style": "IPY_MODEL_62db587137984e47825f6d8d18deac9a",
      "value": " 100/100 (100.0%) | ⏳ 00:20&lt;00:00 | 20.76it/s"
     }
    },
    "821bcdb367604e998d80f0ed92aa4c44": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "8c8f5900feaf4d17bf178e465c764060": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "90aa2c05581b437481faab5c6d0f4ec2": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_789d884dbb9547b2871a7f4e0b3d4c82",
       "IPY_MODEL_d37a3ba29c264c50a4263407e2b175ff",
       "IPY_MODEL_81b61a82d6ad4b3d852941fe1b62e704"
      ],
      "layout": "IPY_MODEL_a9b25926eaba49a294f11d5959ff1126"
     }
    },
    "a9b25926eaba49a294f11d5959ff1126": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "b13aa9b245284d8e8d5bc54e7c78de5a": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "bb24856156f04436b17b3d102d3c2056": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "be387a3166664a14bf9300a425d833be": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "d37a3ba29c264c50a4263407e2b175ff": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_bb24856156f04436b17b3d102d3c2056",
      "max": 100,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_72375a9bd56448b38134735ee2507e9a",
      "value": 100
     }
    },
    "e9081b98ab0444b28ec184856072a1ef": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_b13aa9b245284d8e8d5bc54e7c78de5a",
      "placeholder": "​",
      "style": "IPY_MODEL_1ff8614880b34909b8a782693d389e2c",
      "value": "llm_classify "
     }
    }
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
